/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ProdutoView.java
 *
 * Created on 26/04/2011, 21:10:08
 */

package br.com.comprasPublicas.view.cadastro;

import br.com.comprasPublicas.dao.DAOGenerico;
import br.com.comprasPublicas.dao.DAOProduto;
import br.com.comprasPublicas.entity.GrupoProduto;
import br.com.comprasPublicas.entity.Produto;
import br.com.comprasPublicas.util.HibernateUtil;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;


/**
 *
 * @author helsen
 */
public class ProdutoView extends javax.swing.JFrame {

    /** Creates new form ProdutoView */
    public ProdutoView() {
        initComponents();
        preencher_tblProduto();
        preencher_cmbGrupoProduto();
        tblProduto.setSelectionMode(0);

        //Método subscrito para tabela tblProduto para receber a mudança de linha
        //através do uso do teclado, e estabelecer os eventos apos mudanca da linha.
        //No caso "preenche_objetosDaTabela();"
        /*tblProduto.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                preenche_objetosDaTabela();
            }
        });
         * 
         */
        

        btnNovo.requestFocus();
        status = "alterar";
        btnExcluir.setEnabled(false);
        btnSalvar.setEnabled(false);
        btnCancelar.setEnabled(false);

        //Método utilizado para centralizar o JFrame na tela
        Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
        this.setLocation((tela.width - this.getSize().width) / 2, (tela.height - this.getSize().height) / 2);

        /*Metodo para alterar campo com a tecla enter
         * 
        Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
        forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
        this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
         *
         */
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        buttonGroup2 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        pnlDadosProduto = new javax.swing.JPanel();
        cmbTipo = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        cmbGrupo = new javax.swing.JComboBox();
        cmbUnidade = new javax.swing.JComboBox();
        txtDescricao = new javax.swing.JTextField();
        txtCodigo = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblProduto = new javax.swing.JTable();
        btnVoltar = new javax.swing.JButton();
        pnlBotoes = new javax.swing.JPanel();
        btnNovo = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setName("Form"); // NOI18N
        setResizable(false);
        setUndecorated(true);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        jPanel1.setName("jPanel1"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(br.com.comprasPublicas.compraspublicas.ComprasPublicasApp.class).getContext().getResourceMap(ProdutoView.class);
        jLabel1.setFont(resourceMap.getFont("jLabel1.font")); // NOI18N
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        pnlDadosProduto.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("pnlDadosProduto.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, resourceMap.getFont("pnlDadosProduto.border.titleFont"))); // NOI18N
        pnlDadosProduto.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        pnlDadosProduto.setName("pnlDadosProduto"); // NOI18N

        cmbTipo.setFont(resourceMap.getFont("cmbTipo.font")); // NOI18N
        cmbTipo.setForeground(resourceMap.getColor("cmbTipo.foreground")); // NOI18N
        cmbTipo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Consumo", "Serviço", "Permanente" }));
        cmbTipo.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        cmbTipo.setName("cmbTipo"); // NOI18N
        cmbTipo.setNextFocusableComponent(cmbGrupo);

        jLabel3.setFont(resourceMap.getFont("jLabel3.font")); // NOI18N
        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N

        cmbGrupo.setFont(resourceMap.getFont("cmbGrupo.font")); // NOI18N
        cmbGrupo.setForeground(resourceMap.getColor("cmbGrupo.foreground")); // NOI18N
        cmbGrupo.setName("cmbGrupo"); // NOI18N
        cmbGrupo.setNextFocusableComponent(btnSalvar);

        cmbUnidade.setFont(resourceMap.getFont("cmbUnidade.font")); // NOI18N
        cmbUnidade.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CM", "CM³", "CX", "DZ", "FDO", "G", "KG", "L", "M", "M²", "M³", "MIL", "ML", "UN", "PECA", "RESM", "SACA", "SERV" }));
        cmbUnidade.setName("cmbUnidade"); // NOI18N
        cmbUnidade.setNextFocusableComponent(cmbTipo);

        txtDescricao.setText(resourceMap.getString("txtDescricao.text")); // NOI18N
        txtDescricao.setEnabled(false);
        txtDescricao.setName("txtDescricao"); // NOI18N

        txtCodigo.setText(resourceMap.getString("txtCodigo.text")); // NOI18N
        txtCodigo.setEnabled(false);
        txtCodigo.setName("txtCodigo"); // NOI18N

        jLabel6.setFont(resourceMap.getFont("jLabel6.font")); // NOI18N
        jLabel6.setText(resourceMap.getString("jLabel6.text")); // NOI18N
        jLabel6.setName("jLabel6"); // NOI18N

        jLabel4.setFont(resourceMap.getFont("jLabel4.font")); // NOI18N
        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setName("jLabel4"); // NOI18N

        jLabel5.setFont(resourceMap.getFont("jLabel3.font")); // NOI18N
        jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
        jLabel5.setName("jLabel5"); // NOI18N

        jLabel2.setFont(resourceMap.getFont("jLabel3.font")); // NOI18N
        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        javax.swing.GroupLayout pnlDadosProdutoLayout = new javax.swing.GroupLayout(pnlDadosProduto);
        pnlDadosProduto.setLayout(pnlDadosProdutoLayout);
        pnlDadosProdutoLayout.setHorizontalGroup(
            pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDadosProdutoLayout.createSequentialGroup()
                .addGroup(pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jLabel6)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlDadosProdutoLayout.createSequentialGroup()
                        .addGap(7, 7, 7)
                        .addComponent(jLabel2)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmbUnidade, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlDadosProdutoLayout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jLabel5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmbTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmbGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, 264, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlDadosProdutoLayout.createSequentialGroup()
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtDescricao, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)))
                .addContainerGap())
        );
        pnlDadosProdutoLayout.setVerticalGroup(
            pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDadosProdutoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(txtDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlDadosProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(cmbUnidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5)
                    .addComponent(cmbTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4)
                    .addComponent(cmbGrupo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        tblProduto.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Cod.", "Descrição", "Unid.", "Tipo", "Grupo", "Valor Médio"
            }
        ));
        tblProduto.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        tblProduto.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        tblProduto.setName("tblProduto"); // NOI18N
        tblProduto.setNextFocusableComponent(txtDescricao);
        tblProduto.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tblProduto.getTableHeader().setResizingAllowed(false);
        tblProduto.getTableHeader().setReorderingAllowed(false);
        tblProduto.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblProdutoMouseClicked(evt);
            }
        });
        tblProduto.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tblProdutoFocusLost(evt);
            }
        });
        tblProduto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tblProdutoKeyPressed(evt);
            }
        });
        jScrollPane1.setViewportView(tblProduto);

        btnVoltar.setFont(resourceMap.getFont("btnConsultar.font")); // NOI18N
        btnVoltar.setMnemonic('v');
        btnVoltar.setText(resourceMap.getString("btnVoltar.text")); // NOI18N
        btnVoltar.setName("btnVoltar"); // NOI18N
        btnVoltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVoltarActionPerformed(evt);
            }
        });

        pnlBotoes.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        pnlBotoes.setName("pnlBotoes"); // NOI18N

        btnNovo.setFont(resourceMap.getFont("btnConsultar.font")); // NOI18N
        btnNovo.setMnemonic('n');
        btnNovo.setText(resourceMap.getString("btnNovo.text")); // NOI18N
        btnNovo.setName("btnNovo"); // NOI18N
        btnNovo.setNextFocusableComponent(txtDescricao);
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });

        btnExcluir.setFont(resourceMap.getFont("btnExcluir.font")); // NOI18N
        btnExcluir.setMnemonic('x');
        btnExcluir.setText(resourceMap.getString("btnExcluir.text")); // NOI18N
        btnExcluir.setName("btnExcluir"); // NOI18N
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        btnCancelar.setFont(resourceMap.getFont("btnConsultar.font")); // NOI18N
        btnCancelar.setMnemonic('c');
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        btnSalvar.setFont(resourceMap.getFont("btnSalvar.font")); // NOI18N
        btnSalvar.setMnemonic('s');
        btnSalvar.setText(resourceMap.getString("btnSalvar.text")); // NOI18N
        btnSalvar.setName("btnSalvar"); // NOI18N
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout pnlBotoesLayout = new javax.swing.GroupLayout(pnlBotoes);
        pnlBotoes.setLayout(pnlBotoesLayout);
        pnlBotoesLayout.setHorizontalGroup(
            pnlBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlBotoesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnNovo, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
                    .addComponent(btnExcluir, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
                    .addComponent(btnSalvar, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
                    .addComponent(btnCancelar, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE))
                .addContainerGap())
        );
        pnlBotoesLayout.setVerticalGroup(
            pnlBotoesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlBotoesLayout.createSequentialGroup()
                .addComponent(btnNovo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(btnExcluir)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnSalvar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnCancelar)
                .addGap(32, 32, 32))
        );

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addContainerGap(727, Short.MAX_VALUE)
                        .addComponent(btnVoltar, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(22, 22, 22)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 820, Short.MAX_VALUE)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel1)
                                    .addComponent(pnlDadosProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 74, Short.MAX_VALUE)
                                .addComponent(pnlBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel1)
                        .addGap(18, 18, 18)
                        .addComponent(pnlDadosProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(16, 16, 16)
                        .addComponent(pnlBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnVoltar)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(496, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(99, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnVoltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVoltarActionPerformed
        Object[] options = { "Sim", "Não" };
        int opcao = JOptionPane.showOptionDialog(
            null,
            "Deseja sair da tela de Produto?",
            "Saída de Tela",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.WARNING_MESSAGE,
            null,
            options,
            options[0]);

        if (opcao == 0) {
            this.dispose();
            limpar_dados();
        }
    }//GEN-LAST:event_btnVoltarActionPerformed

    private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed
        limpar_dados();
        txtDescricao.setEnabled(true);
        btnNovo.setEnabled(false);
        btnSalvar.setEnabled(true);
        btnExcluir.setEnabled(false);
        txtDescricao.requestFocus();
        btnCancelar.setEnabled(true);
        select_max();
        status = "salvar";
        tblProduto.setEnabled(false);
    }//GEN-LAST:event_btnNovoActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        try
        {
            Integer index = tblProduto.getSelectedRow();

            pega_objetos();

            if (index >= 0) {
                Object[] options = { "Sim", "Não" };
                int opcao = JOptionPane.showOptionDialog(
                null,
                "Deseja Excluir item selecionado?",
                "Exclusão",
                JOptionPane.DEFAULT_OPTION,
                JOptionPane.WARNING_MESSAGE,
                null,
                options,
                options[0]);
                if (opcao == 0)
                {
                    obj_produto = new DAOGenerico(produto);
                    if(obj_produto.excluir()){
                        btnNovoActionPerformed(evt);
                        txtCodigo.setText("");
                        txtDescricao.setText("");
                        JOptionPane.showMessageDialog(null, "Produto excluído com sucesso");
                        preencher_tblProduto();
                        tblProduto.setEnabled(true);
                    }
                    else{
                        JOptionPane.showMessageDialog(null, "Produto não foi excluído");
                    }
                }

            }
        }
        catch(Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível preencher a tabela de produtos "+erro);
        }
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
    if (!validaDados()){
            }
         else{
            try
            {
                pega_objetos();

                if (status.equals("salvar")){
                    if(obj_produto.inserir()){
                        JOptionPane.showMessageDialog(null, "Produto salvo com sucesso");
                        preencher_tblProduto();
                        btnNovo.setEnabled(true);
                        btnNovo.hasFocus();
                        limpar_dados();
                    } else{
                        JOptionPane.showMessageDialog(null, "Produto não foi salvo");
                    }
                }
                else if (status.equals("alterar")){
                    if(obj_produto.atualizar()){
                        JOptionPane.showMessageDialog(null, "Grupo de Produto atualizado com sucesso");
                        btnNovo.setEnabled(true);
                        btnNovo.hasFocus();
                        preencher_tblProduto();
                        limpar_dados();
                    }
                    else JOptionPane.showMessageDialog(null, "Grupo de Produto não atualizado");
                }
                txtDescricao.setEnabled(false);
                btnCancelar.setEnabled(false);
                btnSalvar.setEnabled(false);
                btnNovo.setEnabled(true);
                tblProduto.clearSelection();
                tblProduto.setEnabled(true);
                }
            catch(Exception erro)
            {
                JOptionPane.showMessageDialog(null, "Não foi possível gravar Grupo de Produto "+erro);
            }
         }
    }//GEN-LAST:event_btnSalvarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        Object[] options = { "Sim", "Não" };
        int opcao = JOptionPane.showOptionDialog(
        null,
        "Deseja cancelar o registro?",
        "Cancelar?",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.WARNING_MESSAGE,
        null,
        options,
        options[0]);

        if (opcao == 0) {
            limpar_dados();
            btnNovo.setEnabled(true);
            txtDescricao.setEnabled(false);
            btnCancelar.setEnabled(false);
            btnSalvar.setEnabled(false);
            btnExcluir.setEnabled(false);
            btnNovo.hasFocus();
            tblProduto.setEnabled(true);
            tblProduto.clearSelection();
            
        }
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void tblProdutoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblProdutoMouseClicked
        preenche_objetosDaTabela();
        status = "alterar";
        btnExcluir.setEnabled(true);
        btnNovo.setEnabled(false);
        btnCancelar.setEnabled(true);
        txtDescricao.setEnabled(true);
        btnSalvar.setEnabled(true);
        btnCancelar.setEnabled(true);
}//GEN-LAST:event_tblProdutoMouseClicked

    private void tblProdutoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tblProdutoFocusLost

    }//GEN-LAST:event_tblProdutoFocusLost

    private void tblProdutoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tblProdutoKeyPressed
    }//GEN-LAST:event_tblProdutoKeyPressed

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
        preencher_cmbGrupoProduto();
        preencher_tblProduto();
    }//GEN-LAST:event_formWindowActivated

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ProdutoView().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JButton btnVoltar;
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.ButtonGroup buttonGroup2;
    private javax.swing.JComboBox cmbGrupo;
    private javax.swing.JComboBox cmbTipo;
    private javax.swing.JComboBox cmbUnidade;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel pnlBotoes;
    private javax.swing.JPanel pnlDadosProduto;
    private javax.swing.JTable tblProduto;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtDescricao;
    // End of variables declaration//GEN-END:variables

    public void preencher_tblProduto()
    {
        try
        {
            tblProduto.getColumnModel().getColumn(0).setPreferredWidth(1);
            tblProduto.getColumnModel().getColumn(1).setPreferredWidth(250);
            tblProduto.getColumnModel().getColumn(2).setPreferredWidth(1);
            tblProduto.getColumnModel().getColumn(3).setPreferredWidth(5);
            tblProduto.getColumnModel().getColumn(4).setPreferredWidth(150);
            tblProduto.getColumnModel().getColumn(5).setPreferredWidth(20);

            DefaultTableModel modelo_tbl = (DefaultTableModel) tblProduto.getModel();
            modelo_tbl.setNumRows(0);

            produto = new Produto();
            obj_dao_generico = new DAOGenerico(produto);

            List<Produto> lista = new ArrayList();
            lista = obj_dao_generico.executa_query("order_by_id_produto");
            int tamanho_lista = lista.size();


            for(int i = 0; i < tamanho_lista;i++)
            {
                produto = lista.get(i);
                modelo_tbl.addRow(new Object[]{produto.getId_produto(),
                                           produto.getNome(),
                                           produto.getUnidade(),
                                           produto.getTipo(),
                                           produto.getGrupo().getDescricao(),
                                           produto.getValor_medio()
                                           });
            }
        }
        catch(Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível preencher tabela "+erro);
        }
       
    }
    
    private void preencher_cmbGrupoProduto() {
        modelo_cmbGrupo = (DefaultComboBoxModel) cmbGrupo.getModel();
        grupoProduto = new GrupoProduto();
        obj_dao_generico = new DAOGenerico(grupoProduto);

        List<GrupoProduto> lista = new ArrayList();
        lista = obj_dao_generico.executa_query("order_by_descricao");
        int tamanho_lista = lista.size();
               
        for (int i = 0; i < tamanho_lista; i++) {
            grupoProduto = lista.get(i);
            modelo_cmbGrupo.addElement(grupoProduto.getDescricao());
        }
    }

    private void preenche_objetosDaTabela() {
        txtCodigo.setText(tblProduto.getModel().getValueAt(tblProduto.getSelectedRow(),0).toString());
        txtDescricao.setText(tblProduto.getModel().getValueAt(tblProduto.getSelectedRow(),1).toString());
        cmbUnidade.setSelectedItem(tblProduto.getModel().getValueAt(tblProduto.getSelectedRow(),2).toString());
        cmbTipo.setSelectedItem(tblProduto.getModel().getValueAt(tblProduto.getSelectedRow(), 3).toString());
        cmbGrupo.setSelectedItem(tblProduto.getModel().getValueAt(tblProduto.getSelectedRow(), 4).toString());
    }

    private List lista_grupo(){
        Session sessao = HibernateUtil.getSessao();
        Transaction transacao = sessao.beginTransaction();

        Query query = sessao.createQuery("from GrupoProduto where descricao = :descricao");
        query.setString("descricao", modelo_cmbGrupo.getSelectedItem().toString());

        List grupoproduto = query.list();

        transacao.commit();
        sessao.close();

        return grupoproduto;

    }

    private void pega_objetos(){
        try{
            produto = new Produto();

            if (status.equals("alterar")){
                int id = Integer.parseInt(txtCodigo.getText());
                produto.setId_produto(id);
            }

            produto.setNome(txtDescricao.getText());

            String tipo = cmbTipo.getSelectedItem().toString();
            produto.setTipo(tipo);


            String unidade = cmbUnidade.getSelectedItem().toString();
            produto.setUnidade(unidade);

            //Setar o Objeto grupoProduto selecionado
            grupoProduto = new GrupoProduto();
            List<GrupoProduto> lista = new ArrayList ();
            lista = lista_grupo();
            int tamanho_lista = lista.size();
            for (int i=0; i<tamanho_lista; i++)
            {
                grupoProduto = lista.get(i);
            }
            produto.setGrupo(grupoProduto);

            obj_produto = new DAOGenerico(produto);

        }
         catch(Exception erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível inserir os dados na tela "+erro);
        }
    }


    public void select_max()
    {
        produto = new Produto();
        obj_dao_generico = new DAOGenerico(produto);
        List<Produto> lista = new ArrayList();
        lista = obj_dao_generico.executa_query("select_max_id_produto");
        int tamanho_lista = lista.size();

        for(int i = 0; i < tamanho_lista;i++)
        {
            produto = lista.get(i);
            String id = String.valueOf(produto.getId_produto()+1);
            txtCodigo.setText(id);
        }

    }

    public Boolean validaDados(){
        Boolean retorno = true;
        String erros = new String();

        if (txtDescricao.getText().equals("")){
            erros += "Produto não informado\n";
            retorno = false;
        }



        if (!retorno){
            JOptionPane.showMessageDialog(null, "Os seguinte(s) erro(s) ocorreu(ram):\n"+erros);
        }

        return retorno;
    }

    public void limpar_dados()
    {
        txtCodigo.setText("");
        txtDescricao.setText("");
        
        cmbTipo.setSelectedIndex(0);
        cmbUnidade.setSelectedIndex(0);
        cmbGrupo.setSelectedIndex(0);
        
    }

    //Objetos a serem utilizados nesta Classe
    private String status = "alterar";
    private DAOGenerico obj_produto;
    private DAOGenerico obj_dao_generico;
    private GrupoProduto grupoProduto;
    private Produto produto;
    private DefaultComboBoxModel modelo_cmbGrupo;
    Integer selecao;
    String selecaoTexto;
    private DAOProduto daoProduto;

}
